home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 11
/
FM Towns Free Software Collection 11.iso
/
t_os
/
tool
/
videocap
/
videocap.bas
< prev
next >
Wrap
BASIC Source File
|
1995-08-22
|
10KB
|
333 lines
1000 '--------------------------------------------------------------------
1010 '取り込みアニメーション作成支援ソフト
1020 '「画像取り込み支援」
1030 'By 福地健太郎
1040 '1995 8 12
1050 '--------------------------------------------------------------------
1060 '
1070 '初期設定
1080 '機械語プロシジャの読込
1090 CLEAR ,,,,754-512
1100 LOADM "meanfilt.rex",0
1110 '
1120 DEFINT A-Z
1130 SCREEN 0
1140 SCREEN@ 1
1150 '
1160 DIM BASEPIC(320*240*3-1), NEWPIC(320*240-1)
1170 BASEPIC_PTR& = VARPTR(BASEPIC(0))
1180 NEWPIC_PTR& = VARPTR(NEWPIC(0))
1190 '
1200 'パラメーターの初期設定
1210 SAVE_DRV$ = "d:"
1220 SAVE_DIR$ = "\"
1230 SAVE_FILE$ = "temp"
1240 '
1250 HTONE = 0
1260 USE_MF = 0
1270 MF_NUM = 16
1280 MF_GAIN! = 1!
1290 '
1300 '=== Main Menu ===
1310 *MENU_LOOP
1320 CLS
1330 PRINT "(1) 格納先のディレクトリパス",SAVE_DRV$+SAVE_DIR$
1340 PRINT "(2) 保存ファイル名",SAVE_FILE$+"???.tif"
1350 PRINT "(3) 平均値フィルター";
1360 IF USE_MF = 1 THEN
1370 PRINT "使用する"
1380 PRINT "(4) サンプリング枚数",MF_NUM
1390 PRINT "(5) ゲイン調整値",MF_GAIN!
1400 ELSE
1410 PRINT "使用しない"
1420 ENDIF
1430 PRINT
1440 PRINT "(8) テスト取り込み"
1450 PRINT "(9) 本番"
1460 PRINT "(0) 終了"
1470 INPUT "変更・実行する項目を選んで入力してください。",SEL
1480 '
1490 IF SEL = 1 THEN
1500 GOSUB *GET_PATH
1510 ELSE IF SEL = 2 THEN
1520 GOSUB *GET_FILENAME
1530 ELSE IF SEL = 3 THEN
1540 GOSUB *GET_USEMF
1550 ELSE IF SEL = 4 THEN
1560 GOSUB *GET_MFNUM
1570 ELSE IF SEL = 5 THEN
1580 GOSUB *GET_MFGAIN
1590 ELSE IF SEL = 8 THEN
1600 GOSUB *TEST_INPUT
1610 ELSE IF SEL = 9 THEN
1620 GOSUB *VIDEO_INPUT
1630 ENDIF
1640 IF SEL<>0 THEN *MENU_LOOP
1650 '
1660 END
1670 '
1680 *GET_PATH
1690 *L_GET_DRV
1700 ERR_CHK = 0
1710 PRINT "格納先のドライブ名を入力してください。(現在は";SAVE_DRV$;")";
1720 INPUT TEMP_DRV$
1730 IF TEMP_DRV$ <> "" THEN
1740 TEMP_DRV$ = LEFT$(TEMP_DRV$, 1) + ":"
1750 TEST_DRV$ = TEMP_DRV$
1760 GOSUB *TEST_DRV
1770 IF TEST_ERR <> 0 THEN
1780 ERR_CHK = 1
1790 ELSE
1800 ERR_CHK = 0
1810 SAVE_DRV$ = TEMP_DRV$
1820 ENDIF
1830 ENDIF
1840 IF ERR_CHK <> 0 THEN *L_GET_DRV
1850 *L_GET_DIR
1860 ERR_CHK = 0
1870 PRINT "格納先のディレクトリを入力してください。(現在は";SAVE_DIR$;")";
1880 INPUT TEMP_DIR$
1890 IF TEMP_DIR$ <> "" THEN
1900 IF RIGHT$(TEMP_DIR$, 1) = "\" THEN
1910 IF LEN(TEMP_DIR$) > 1 THEN
1920 TEMP_DIR$ = LEFT$(TEMP_DIR$, LEN(TEMP_DIR$)-1)
1930 ENDIF
1940 ENDIF
1950 TEST_PATH$ = SAVE_DRV$ + TEMP_DIR$
1960 GOSUB *TEST_PATH
1970 IF TEST_ERR <> 0 THEN
1980 ERR_CHK = 1
1990 ELSE
2000 ERR_CHK = 0
2010 SAVE_DIR$ = TEMP_DIR$
2020 ENDIF
2030 ENDIF
2040 IF ERR_CHK <> 0 THEN *L_GET_DIR
2050 GOSUB *GET_FILENAME
2060 RETURN
2070 '
2080 *GET_FILENAME
2090 ERR_CHK = 0
2100 PRINT "保存ファイル名を入力してください。(ANK 5文字以内。現在は";SAVE_FILE$;")";
2110 INPUT TEMP_FILE$
2120 IF TEMP_FILE$ <> "" THEN
2130 IF LEN(TEMP_FILE$) > 5 THEN
2140 PRINT "長すぎます(5文字以内)"
2150 ERR_CHK = 1
2160 ELSE
2170 TEST_FILE$ = SAVE_DRV$ + SAVE_DIR$ + "\" + TEMP_FILE$ + "001.tif"
2180 GOSUB *TEST_FILE
2190 IF TEST_ERR = 0 THEN
2192 ERR_CHK = 0
2193 SAVE_FILE$ = TEMP_FILE$
2210 ELSE
2215 PRINT "指定したファイルは既に存在しています"
2220 ERR_CHK = 1
2240 ENDIF
2250 ENDIF
2260 ENDIF
2270 IF ERR_CHK <> 0 THEN *GET_FILENAME
2280 RETURN
2290 '
2300 *TEST_DRV
2310 ON ERROR GOTO *IO_ERROR
2320 IO_ERR = 0
2330 SHELL TEST_DRV$
2340 IF IO_ERR <> 0 THEN TEST_ERR = 1 ELSE TEST_ERR = 0
2350 ON ERROR GOTO 0
2360 RETURN
2370 '
2380 *TEST_PATH
2390 ON ERROR GOTO *IO_ERROR
2400 IO_ERR = 0
2410 SHELL "chdir "+TEST_PATH$
2420 IF IO_ERR = 63 THEN
2425 PRINT "指定したディレクトリは存在しません"
2430 INPUT "ディレクトリを作成しますか(1=Yes,0=No)",TEST_ANSWER
2440 IF TEST_ANSWER = 1 THEN
2450 SHELL "mkdir "+TEST_PATH$
2460 TEST_ERR = 0
2470 ELSE
2480 TEST_ERR = 1
2490 ENDIF
2500 ELSE IF IO_ERR <> 0 THEN
2510 TEST_ERR = 1
2520 ELSE
2530 TEST_ERR = 0
2540 ENDIF
2550 ON ERROR GOTO 0
2560 RETURN
2570 '
2580 *TEST_FILE
2590 ON ERROR GOTO *IO_ERROR
2600 IO_ERR = 0
2610 LOAD@ TEST_FILE$
2620 IF IO_ERR = 63 THEN TEST_ERR = 0 ELSE TEST_ERR = 1
2640 ON ERROR GOTO 0
2650 RETURN
2660 '
2670 *IO_ERROR
2680 IO_ERR = ERR
2690 SIMPOSE 0
2700 SCREEN 0
2710 IF ERR = 60 THEN
2720 PRINT "指定したドライブは使えません"
2730 ELSE IF ERR = 67 THEN
2740 PRINT "指定したドライブには空き領域がありません"
2750 ELSE IF ERR = 75 THEN
2760 PRINT "指定したドライブへのアクセスが拒否されました"
2770 ELSE IF ERR = 64 THEN
2780 PRINT "指定したファイル名は既に同じディレクトリに存在しています"
2790 ELSE IF ERR = 63 THEN
2800 ' PRINT "指定したディレクトリはありません"
2805 PRINT "少々お待ちください"
2810 ELSE IF ERR = 55 THEN
2820 PRINT "ファイル名の記述に誤りがあります"
2830 ELSE
2840 PRINT "とにかく何か間違っています"
2850 ENDIF
2860 RESUME NEXT
2870 '
2880 *GET_USEMF
2890 INPUT "平均値フィルターを使いますか(1=Yes,0=No)",USE_MF
2900 IF USE_MF = 1 THEN
2910 GOSUB *GET_MFNUM
2920 GOSUB *GET_MFGAIN
2930 ENDIF
2940 RETURN
2950 '
2960 *GET_MFNUM
2970 INPUT "サンプリング枚数を入力してください(2-128)",MF_NUM
2980 IF MF_NUM < 2 OR MF_NUM > 128 THEN *GET_MFNUM
2990 RETURN
3000 '
3010 *GET_MFGAIN
3020 GAIN_MIN! = MF_NUM / 254
3030 GAIN_MAX! = MF_NUM
3040 PRINT "ゲイン調整値を入力してください(";GAIN_MIN!;"-";GAIN_MAX!;")";
3050 INPUT MF_GAIN!
3060 IF MF_GAIN! < GAIN_MIN! OR MF_GAIN! > GAIN_MAX! THEN *GET_MFGAIN
3070 RETURN
3080 '
3090 *MF_INPUT
3100 FOR MF_LOOP = 1 TO MF_NUM
3110 SIMPOSE 3
3120 SIMPOSE 1
3130 GET@A (0,0)-(319,239),NEWPIC
3140 CALLM 0,BASEPIC_PTR&,NEWPIC_PTR&
3150 NEXT MF_LOOP
3160 CALLM 5,BASEPIC_PTR&,NEWPIC_PTR&,CINT(MF_NUM/MF_GAIN!)
3170 PUT@A (0,0)-(319,239),NEWPIC
3180 RETURN
3190 '
3200 *TEST_INPUT
3210 CLS
3220 SIMPOSE 3
3230 OP = 0
3240 WHILE OP = 0
3250 PD1 = PTRIG(1)
3260 PD2 = PTRIG(2)
3270 IF PD1 = 1 OR PD2 = 1 THEN OP = 1
3280 IF PD1 = 2 OR PD2 = 2 THEN OP = 9
3290 WEND
3300 IF OP = 1 THEN
3310 IF USE_MF = 1 THEN
3320 GOSUB *MF_INPUT
3330 ELSE
3340 SIMPOSE 1
3350 ENDIF
3360 ENDIF
3370 SIMPOSE 0
3380 *L_TI_LOOP
3390 IF PTRIG(1) = 0 AND PTRIG(2) = 0 THEN *L_TI_LOOP
3400 RETURN
3410 '
3420 *VIDEO_INPUT
3430 TEST_FILE$ = SAVE_DRV$ + SAVE_DIR$ + "\" + SAVE_FILE$ + "001.tif"
3440 GOSUB *TEST_FILE
3450 IF TEST_ERR <> 0 THEN PRINT "指定したファイルは既に存在しています":A$=INPUT$(1):GOTO *L_VI_EXIT
3460 '
3470 COUNTER = 1
3480 SHELL "chdir " + SAVE_DRV$ + SAVE_DIR$
3490 CLS
3500 HTONE = 0
3510 SIMPOSE 3
3520 '
3530 *L_VI_LOOP
3540 OP = 0
3550 WHILE OP = 0
3560 PD1 = PTRIG(1)
3570 PD2 = PTRIG(2)
3580 K$ = INKEY$
3590 IF PD1 = 1 OR PD2 = 1 THEN OP = 1
3600 IF PD1 = 2 OR PD2 = 2 THEN OP = 9
3610 IF K$="h" OR K$="H" THEN OP = 2
3620 WEND
3630 IF OP = 2 THEN GOSUB *TOG_HALF:GOTO *L_VI_LOOP
3640 IF OP = 9 THEN *L_VI_EXIT
3650 '
3660 IF HTONE = 1 THEN
3670 GOSUB *HALF_OFF
3680 IF USE_MF = 1 THEN
3690 GOSUB *MF_INPUT
3700 ELSE
3710 SIMPOSE 3
3720 SIMPOSE 1
3730 ENDIF
3740 GOSUB *SAVE_PIC
3750 ROLL ,-4
3760 SYMBOL (8,4),"計"+STR$(COUNTER-1)+"枚",1,1,,,,8
3770 GOSUB *HALF_ON
3780 ELSE
3790 IF USE_MF = 1 THEN
3800 GOSUB *MF_INPUT
3810 ELSE
3820 SIMPOSE 1
3830 ENDIF
3840 GOSUB *SAVE_PIC
3850 SYMBOL (160-32,120-8),"計"+STR$(COUNTER-1)+"枚",1,1,,,,8
3860 WAIT 100
3870 SIMPOSE 3
3880 ENDIF
3890 '
3900 GOTO *L_VI_LOOP
3910 *L_VI_EXIT
3920 SIMPOSE 0:SCREEN 0
3930 RETURN
3940 '
3950 *SAVE_PIC
3960 A$ = STR$(COUNTER)
3970 SV$ = SAVE_DRV$ + SAVE_DIR$ + "\" + SAVE_FILE$ + RIGHT$("00"+RIGHT$(A$,LEN(A$)-1),3) + ".tif"
3980 SAVE@ SV$,(0,0)-(319,239),0,1
3990 COUNTER = COUNTER + 1
4000 RETURN
4010 '
4020 *TOG_HALF
4030 IF HTONE = 0 THEN
4040 IF COUNTER > 1 THEN
4050 SIMPOSE 1
4060 A$ = STR$(COUNTER-1)
4070 SV$ = SAVE_DRV$ + SAVE_DIR$ + "\" + SAVE_FILE$ + RIGHT$("00"+RIGHT$(A$,LEN(A$)-1),3) + ".tif"
4080 LOAD@ SV$
4090 ROLL ,-4
4100 ENDIF
4110 GOSUB *HALF_ON
4120 HTONE = 1
4130 ELSE
4140 GOSUB *HALF_OFF
4150 HTONE = 0
4160 SIMPOSE 3
4170 ENDIF
4180 RETURN
4190 '
4200 *HALF_ON
4210 SIMPOSE 1
4220 OUT &H440,&H1E
4230 OUT &H442,&H0B
4240 RETURN
4250 '
4260 *HALF_OFF
4270 OUT &H440,&H1E
4280 OUT &H442,&H03
4290 RETURN